#include <memory>
#include <ctime>
#include "task.hpp"
#include "threadpool.hpp"

//单例模式的线程池--饿汉方式实现

// using ThreadPool_t = ThreadPool<int>;
using ThreadPool_t = ThreadPool<Task>;

void assignTask(ThreadPool_t &tp, int num) // num表示任务数量
{
    // 任务是整形数据
    // int cnt = 1;
    // while (num--)
    // {
    //     tp.push(cnt);
    //     cout << "assigning task is: " << cnt++ << endl;
    //     sleep(1);
    // }

    srand((unsigned int)time(nullptr) ^ pthread_self());
    while (num--)
    {
        int a = rand() % 100;
        int b = rand() % 100;
        Task t(a, b);
        tp.push(t);
    }
}

int main()
{
    
    //准备工作
    EnableScreen(); //将日志信息输出到屏幕

    //EnableFile(); //将日志输出到文件中

    //创建单例线程池
    ThreadPool_t* ptp = ThreadPool_t::getInstance();
    ThreadPool_t::getInstance();
    ThreadPool_t::getInstance();

    // //安排任务
    assignTask(*ptp, 20);
    
    // //终止线程池并回收
    ptp->stop();

    return 0;
}